package com.roy.netty.pojoTransfer;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

/**
 * @author ：楼兰
 * @date ：Created in 2021/6/8
 * @description:
 **/

public class PojoNettyClientHandler extends SimpleChannelInboundHandler<User> {

    //连接建立时，向服务端发送10个user.user对象会经过Encoder加密成字节流发送给服务端。
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        //这里如果用for循环，会发生TCP粘包，粘包问题的解决方式就是要控制每次读的字节长度。
        //会在后面再做示例。
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setUserId(i);
            user.setUserSalary(new Double(i * 128));
            user.setUserName("worker" + i);
            ctx.writeAndFlush(user);
        }

//        User user = new User();
//        user.setUserId(1);
//        user.setUserSalary( new Double(1*128) );
//        user.setUserName("worker1");
//        ctx.writeAndFlush(user);
    }
    //服务端返回的消息经过PojoDecoder转码成user对象。
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, User user) throws Exception {
        System.out.println("收到服务端的消息："+user);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        System.out.println("发生异常 "+cause.getMessage());
        ctx.close();
    }
}
